home *** CD-ROM | disk | FTP | other *** search
/ Aminet 19 / Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso / Aminet / comm / tcp / AmiServ.lha / AmiServ.AMIRX next >
Text File  |  1997-04-07  |  9KB  |  2 lines

  1. /* Optimized with RexxOpt 1.8 */
  2. PARSE ARG nick host port path .;ADDRESS "AMIRC.1";OPTIONS RESULTS;PRAGMA("W","NULL");IF ~SHOW("L","rexxsupport.library") THEN;DO;IF ~ADDLIB("rexxsupport.library",0,-30,0) THEN;DO;"ECHO P="D2C(27)"b«AmiServ» Could not open rexxsupport.library";EXIT;END;END;IF nick="" THEN;DO;SELECT;WHEN EXISTS("AmiServ.AMIRX") THEN amiserv="AmiServ.AMIRX";WHEN EXISTS("Rexx/AmiServ.AMIRX") THEN amiserv="Rexx/AmiServ.AMIRX";OTHERWISE;DO;"ECHO P="D2C(27)"b«AmiServ» Could not find AmiServ.AMIRX, it MUST be in either AmIRCs Rexx directory, or the same place as it's executable.";EXIT;END;END;IF ~EXISTS("C:RequestFile") THEN;DO;"ECHO P="D2C(27)"b«AmiServ» You need C:RequestFile installed.";EXIT;END;ADDRESS COMMAND "C:RequestFile >T:result DRAWERSONLY";OPEN(1,"T:result");path=READLN(1);CLOSE(1);IF path="" THEN;DO;"ECHO P="D2C(27)"b«AmiServ» No FServe directory specified.";EXIT;END;path=STRIP(TRANSLATE(path," ",D2C(34)),"B");IF RIGHT(path,1)="/" THEN path=LEFT(path,LENGTH(path)-1);users="";"ECHO P="D2C(27)"b«AmiServ» File Server Ready ("path"), waiting for connections..";DO FOREVER;drop comm;drop dest;drop prefix;drop rest;'getline';comm=line.command;dest=line.dest;prefix=line.prefix;rest=line.rest;"GetMyNick";mynick=result;IF LEFT(dest,1)=":" THEN dest=RIGHT(dest,LENGTH(dest)-1);DO loop=1 TO WORDS(users);IF ~EXISTS("ENV:"WORD(users,loop)".curdir") THEN;DO;users=STRIP(DELWORD(users,loop,1),"B");SAY "USERS: "users;END;END;IF comm="PRIVMSG" THEN;DO;host=RIGHT(prefix,LENGTH(prefix)-POS("@",prefix));nick=LEFT(prefix,POS("!",prefix)-1);using=0;DO loop=1 TO WORDS(users);IF UPPER(WORD(users,loop))=UPPER(host) THEN using=loop;END;SELECT;WHEN UPPER(dest)=UPPER(mynick)&UPPER(rest)=":"D2C(1)"FSERVE QUIT"D2C(1) THEN;DO;IF WORDS(users)=0 THEN LEAVE;ELSE "ECHO P="D2C(27)"b«AmiServ» Can't quit at this time, there are still "WORDS(users)" connections. ("users")";END;WHEN using>0&LEFT(rest,10)=":"D2C(1)"DCC SEND" THEN;DO;DO UNTIL OPEN(1,"ENV:"host".curdir","R");END;curdir=READLN(1);CLOSE(1);file=WORD(rest,3);"SAY /DCC GET "nick" "file" "curdir""file;END;WHEN LEFT(rest,10)=":"D2C(1)"DCC CHAT" THEN;DO;IF using=0 THEN;DO;"ECHO P="D2C(27)"b«AmiServ» Connecting "D2C(2)""nick""D2C(2)" to FServe..";OPEN(1,"ENV:"host".curdir","W");CLOSE(1);ADDRESS COMMAND amiserv" "nick" "host" "WORD(rest,5)" "path;users=users" "host;SAY "USERS: "users;END;ELSE;DO;IF UPPER(WORD(users,loop)) ~=UPPER(nick) THEN "SAY /DCC CLOSE CHAT "nick;"RAW NOTICE "nick" :Why would you want to connect to the FServe TWICE?!";"ECHO P="D2C(27)"b«AmiServ» Rejected dual connection attempt.";END;END;OTHERWISE NOP;END;END;END;"ECHO P="D2C(27)"b«AmiServ» AmiServ has been quit";"ECHO P="D2C(27)"b«AmiServ» Please send comments, bug reports, etc, to andrew.ricketts@cccp.net";EXIT;END;PRAGMA("D",path);path=PRAGMA("D");DO UNTIL OPEN(1,"ENV:"host".curdir","W");END;WRITELN(1,PRAGMA("D"));CLOSE(1);IF ~OPEN("DCC","TCP:"host"/"port) THEN;DO;"ECHO P="D2C(27)"b«AmiServ» Connection to "D2C(2)""nick" ("host")"D2C(2)" Failed.";"RAW NOTICE "nick" :Connection Failed.";DELETE("ENV:"host".curdir");EXIT;END;"ECHO P="D2C(27)"b«AmiServ» Connection to "D2C(2)""nick" ("host")"D2C(2)" Established.";Send("Hello "nick", Welcome to AmiServ v1.0 by Andrew "D2C(34)"Andy"D2C(34)" Ricketts.");Send("Commands: help dir cd read get quit");Send("Type HELP followed by a command to get help on it.");Send("To upload a file there is no command, just go to the directory you want it in, and send it.");Send("Enjoy your stay..");DO FOREVER;curdir=PRAGMA("D");Send(curdir">");line=READLN("DCC");IF EOF("DCC") THEN LEAVE;SAY "<"nick"> "line;command=UPPER(WORD(line,1));arguments=WORD(line,2);SELECT;WHEN command="HELP" THEN;DO;arguments=UPPER(arguments);SELECT;WHEN arguments="DIR" THEN;DO;Send("Command: DIR");Send("Usage: DIR or DIR [directory]");Send("Gives you a list of files in the current directory or one you specify.");END;WHEN arguments="CD" THEN;DO;Send("Command: CD");Send("Usage: CD [directory]");Send("Allows you to change directory, so you don't need to keep specifying the path with the DIR command. Simply type CD followed by an available directory.");END;WHEN arguments="READ" THEN;DO;Send("Command: READ");Send("Usage: READ [textfile]");Send("Displays a specified text file in groups of 20 lines. Type READ followed by the text file you want to read.");END;WHEN arguments="GET" THEN;DO;Send("Command: GET");Send("Usage: GET [filename]");Send("Sends a specified file to you, just type get followed by the file you want.");END;WHEN arguments="QUIT" THEN;DO;Send("Command: QUIT");Send("Usage: QUIT");Send("Disconnects you from the fserve.");END;OTHERWISE;DO;Send("Commands: help dir cd read get quit");Send("To get help on a particular command, type HELP followed by the command you want help on.");Send("To upload a file there is no command, just go to the directory you want it to be in, and send it.");END;END;END;WHEN command="DIR" THEN;DO;IF LEFT(arguments,1)="/" THEN arguments="/"arguments;IF arguments="/" THEN arguments="//";arguments=curdir""arguments;IF EXISTS(arguments) THEN;DO;PRAGMA("D",arguments);IF LEFT(PRAGMA("D"),LENGTH(path))=path THEN;DO;ADDRESS COMMAND "List "PRAGMA("D")" LFormat "D2C(34)"%N %L %A"D2C(34)" >T:"host;IF EXISTS("C:Sort") THEN ADDRESS COMMAND "Sort T:"host" T:"host;OPEN("Dir","T:"host,"R");Send("Directory of "D2C(34)""PRAGMA("D")""D2C(34));totaldirs=0;totalfiles=0;DO FOREVER;files=READLN("Dir");IF EOF("Dir") THEN LEAVE;file=WORD(files,1);size=WORD(files,2);prot=WORD(files,3);IF LEFT(prot,1) ~="h" THEN;DO;Send(file""COPIES(" ",30-LENGTH(file))""size);IF size="Dir" THEN totaldirs=totaldirs+1;ELSE totalfiles=totalfiles+1;END;END;Send("Files: "totalfiles", Directories: "totaldirs);Close("Dir");DELETE("T:"host);END;ELSE Send("object not found");END;ELSE Send("object not found");PRAGMA("D",curdir);END;WHEN command="READ" THEN;DO;IF arguments="" THEN;DO;Send("Read <text file>");RETURN 0;END;directory=LEFT(arguments,LASTPOS("/",arguments));filename=RIGHT(arguments,LENGTH(arguments)-LENGTH(directory));directory=curdir""directory;IF EXISTS(directory) THEN;DO;PRAGMA("D",directory);IF LEFT(PRAGMA("D"),LENGTH(path))=path THEN;DO;IF EXISTS(filename) THEN;DO;IF WORD(STATEF(filename),1)="FILE"&(UPPER(RIGHT(filename,3))="TXT"|UPPER(RIGHT(filename,3))="ASC") THEN;DO;IF OPEN("Text",filename,"R") THEN;DO;DO FOREVER;DO read=1 TO 20;line=READLN("Text");IF EOF("Text") THEN LEAVE;Send(line);END;IF EOF("Text") THEN LEAVE;Send(D2C(2)"(C)ontinue (S)top"D2C(2));command=READLN("DCC");IF UPPER(command)="S" THEN LEAVE;END;CLOSE("Text");END;ELSE Send("Sorry, unable to open this file");END;ELSE Send("You can only read text files.");END;ELSE Send("object not found");END;ELSE Send("Access Denied.");END;ELSE Send("No such directory.");PRAGMA("D",curdir);END;WHEN command="GET" THEN;DO;IF arguments="" THEN;DO;Send("Get <filename>");RETURN 0;END;directory=LEFT(arguments,LASTPOS("/",arguments));filename=RIGHT(arguments,LENGTH(arguments)-LENGTH(directory));directory=curdir""directory;IF EXISTS(directory) THEN;DO;PRAGMA("D",directory);IF LEFT(PRAGMA("D"),LENGTH(path))=path THEN;DO;IF EXISTS(filename) THEN;DO;IF WORD(STATEF(filename),1)="FILE" THEN;DO;"SAY /DCC SEND "nick" "directory"/"filename;Send("Sending "D2C(2)""filename""D2C(2)" now..");"ECHO P="D2C(27)"b«AmiServ» "D2C(2)""nick""D2C(2)" is now downloading "D2C(2)""filename""D2C(2);END;ELSE Send("You can only download files.");END;ELSE Send("No such file.");END;ELSE Send("Access Denied.");END;ELSE Send("No such directory.");PRAGMA("D",curdir);END;WHEN command="QUIT" THEN LEAVE;OTHERWISE;DO;IF command="CD" THEN directory=arguments;ELSE directory=command;IF command="CD\" THEN directory=":";IF command="CD.." THEN directory="/";IF directory=".." THEN directory="/";IF directory=":" THEN;DO;curdir="";directory=path;END;ELSE IF RIGHT(curdir,1) ~=":"&RIGHT(curdir,1) ~="/" THEN directory="/"directory;directory=curdir""directory;IF EXISTS(directory) THEN;DO;IF WORD(STATEF(directory),1)="DIR" THEN;DO;PRAGMA("D",directory);IF LEFT(PRAGMA("D"),LENGTH(path))=path THEN;DO;DO UNTIL OPEN(1,"ENV:"host".curdir","W");END;savecurdir=PRAGMA("D");IF RIGHT(savecurdir,1) ~=":" THEN savecurdir=savecurdir"/";WRITELN(1,savecurdir);CLOSE(1);END;ELSE;DO;PRAGMA("D",curdir);Send("Access Denied.");END;END;ELSE Send("To download a file, type GET followed by the filename.");END;ELSE Send("object not found");END;END;END;Send("Thank-you for using AFS, please send comments to andrew.ricketts@cccp.net");CLOSE("DCC");DELETE("ENV:"host".curdir");"ECHO P="D2C(27)"b«AmiServ» Connection to "D2C(2)""host""D2C(2)" Released.";EXIT;Send:;PARSE ARG text;WRITELN("DCC",text);SAY ">"nick"< "text;RETURN 0